export default {
    namespaced: true,
    state: {
        // 购物车数组
        cartList: uni.getStorageSync("cartList") || []
    },
    // 相当于vuex中的计算属性
    getters: {

        // 购物车的商品数量
        // 购物车的商品总数量
        cartCount(state) {
        let count = 0;
        state.cartList.forEach((goods) => {
          count += goods.num;
        });
        return count;
        },
        //   子元素的选择状态控制全选的状态
        isAllChecked(state) {
       return state.cartList.every(goods => {
            return goods.checked === true
        })
        },
        // 获取 用户勾选了的商品 组成新的数组！！！  
        checkedCartList(state) {
        return state.cartList.filter(goods => goods.checked);
        },
        // 计算总数量
        totalCount(state,getters) {
            let totalCount = 0
            getters.checkedCartList.forEach(goods=>totalCount += goods.num)
            return totalCount
        },
        // 计算总价钱
        totalPrice(state, getters) {
            let totalPrice = 0;
            getters.checkedCartList.forEach(goods => totalPrice += goods.num * goods.goods_price)
            return totalPrice;
        }
    },
    // 更改数据
    mutations: {
        // 添加商品
        cartAdd(state, payload) {
            // 判断当前数据是否存在于数组中
            const index = state.cartList.findIndex(goods => goods.goods_id === payload.value.goods_id)
            // 判断
            if (index === -1) {
                // 不存在
                state.cartList.push({...payload.value,num:1,checked:true})
            }else {
                // 存在
                state.cartList[index].num++
            }
            console.log(24,state.cartList);
            // 将数据缓存到小程序的本地存储中
            uni.setStorageSync("cartList",state.cartList)
        },
        // 更改商品列表被选中的状态
        cartToggleCheck(state,payload) {
            // 使用传递过来的id找到准备的index，来更改商品的选中状态
            const index = state.cartList.findIndex(goods => goods.goods_id === payload.value)
            state.cartList[index].checked = !state.cartList[index].checked
            // 存一份到缓存中
            uni.setStorageSync("cartList", state.cartList)
        },
        // 更改商品的数量
        async cartNumUpdate(state,payload) {
            const index = state.cartList.findIndex(goods => goods.goods_id === payload.value.goods_id)
            // 需要做判断，如果当总数量等于1，并且你点击的是减号的时候，就是删除功能，将数据善举，并提示用户，确认是否删除
            if (payload.value.unit === -1 && payload.value.num === 1) {
                console.log('删除数据');
                // 二次询问
                const [err, result] = await uni.showModal({
                    title:'提示',
                    content: '确认删除数据'
                })
                console.log(56,err, result);
                // err表示出错，result表示存储着点击后的数据
                if(err) {
                    console.log('出错了');
                    console.log(err);
                    return
                }
                // 用户点击确定还是取消
                if (result.confirm) {
                    // 执行删除
                    state.cartList.splice(index,1)
                    // 存数据
                    uni.setStorageSync("cartList", state.cartList)
                } else {
                    return
                }                                     
            } else {
                // 更改商品的数量
                state.cartList[index].num += payload.value.unit
                // 存数据
                uni.setStorageSync("cartList", state.cartList)
            }

        },
        // 全选按钮影响小选按钮
        cartAllToggle(state,payload) {
            const isAllChecked = !payload.value;
            state.cartList.forEach(goods => goods.checked = isAllChecked);
            uni.setStorageSync("cartList", state.cartList)
        }
    },
    actions: { 
    }
}